home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / despereaux-swings.swf / scripts / Box2D / Dynamics / b2ContactManager.as < prev    next >
Encoding:
Text File  |  2011-10-17  |  7.1 KB  |  220 lines

  1. package Box2D.Dynamics
  2. {
  3.    import Box2D.Collision.Shapes.b2Shape;
  4.    import Box2D.Collision.b2ContactPoint;
  5.    import Box2D.Collision.b2Manifold;
  6.    import Box2D.Collision.b2ManifoldPoint;
  7.    import Box2D.Collision.b2PairCallback;
  8.    import Box2D.Common.Math.b2Vec2;
  9.    import Box2D.Dynamics.Contacts.b2Contact;
  10.    import Box2D.Dynamics.Contacts.b2NullContact;
  11.    
  12.    public class b2ContactManager extends b2PairCallback
  13.    {
  14.       
  15.       private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
  16.        
  17.       
  18.       public var m_world:b2World;
  19.       
  20.       public var m_destroyImmediate:Boolean;
  21.       
  22.       public var m_nullContact:b2NullContact;
  23.       
  24.       public function b2ContactManager()
  25.       {
  26.          m_nullContact = new b2NullContact();
  27.          super();
  28.          m_world = null;
  29.          m_destroyImmediate = false;
  30.       }
  31.       
  32.       override public function PairAdded(param1:*, param2:*) : *
  33.       {
  34.          var _loc3_:b2Shape = null;
  35.          var _loc4_:b2Shape = null;
  36.          var _loc5_:b2Body = null;
  37.          var _loc6_:b2Body = null;
  38.          var _loc7_:b2Contact = null;
  39.          _loc3_ = param1 as b2Shape;
  40.          _loc4_ = param2 as b2Shape;
  41.          _loc5_ = _loc3_.m_body;
  42.          _loc6_ = _loc4_.m_body;
  43.          if(_loc5_.IsStatic() && _loc6_.IsStatic())
  44.          {
  45.             return m_nullContact;
  46.          }
  47.          if(_loc3_.m_body == _loc4_.m_body)
  48.          {
  49.             return m_nullContact;
  50.          }
  51.          if(_loc6_.IsConnected(_loc5_))
  52.          {
  53.             return m_nullContact;
  54.          }
  55.          if(m_world.m_contactFilter != null && m_world.m_contactFilter.ShouldCollide(_loc3_,_loc4_) == false)
  56.          {
  57.             return m_nullContact;
  58.          }
  59.          if((_loc7_ = b2Contact.Create(_loc3_,_loc4_,m_world.m_blockAllocator)) == null)
  60.          {
  61.             return m_nullContact;
  62.          }
  63.          _loc3_ = _loc7_.m_shape1;
  64.          _loc4_ = _loc7_.m_shape2;
  65.          _loc5_ = _loc3_.m_body;
  66.          _loc6_ = _loc4_.m_body;
  67.          _loc7_.m_prev = null;
  68.          _loc7_.m_next = m_world.m_contactList;
  69.          if(m_world.m_contactList != null)
  70.          {
  71.             m_world.m_contactList.m_prev = _loc7_;
  72.          }
  73.          m_world.m_contactList = _loc7_;
  74.          _loc7_.m_node1.contact = _loc7_;
  75.          _loc7_.m_node1.other = _loc6_;
  76.          _loc7_.m_node1.prev = null;
  77.          _loc7_.m_node1.next = _loc5_.m_contactList;
  78.          if(_loc5_.m_contactList != null)
  79.          {
  80.             _loc5_.m_contactList.prev = _loc7_.m_node1;
  81.          }
  82.          _loc5_.m_contactList = _loc7_.m_node1;
  83.          _loc7_.m_node2.contact = _loc7_;
  84.          _loc7_.m_node2.other = _loc5_;
  85.          _loc7_.m_node2.prev = null;
  86.          _loc7_.m_node2.next = _loc6_.m_contactList;
  87.          if(_loc6_.m_contactList != null)
  88.          {
  89.             _loc6_.m_contactList.prev = _loc7_.m_node2;
  90.          }
  91.          _loc6_.m_contactList = _loc7_.m_node2;
  92.          ++m_world.m_contactCount;
  93.          return _loc7_;
  94.       }
  95.       
  96.       override public function PairRemoved(param1:*, param2:*, param3:*) : void
  97.       {
  98.          var _loc4_:b2Contact = null;
  99.          if(param3 == null)
  100.          {
  101.             return;
  102.          }
  103.          if((_loc4_ = param3 as b2Contact) == m_nullContact)
  104.          {
  105.             return;
  106.          }
  107.          Destroy(_loc4_);
  108.       }
  109.       
  110.       public function Destroy(param1:b2Contact) : void
  111.       {
  112.          var _loc2_:b2Shape = null;
  113.          var _loc3_:b2Shape = null;
  114.          var _loc4_:int = 0;
  115.          var _loc5_:b2Body = null;
  116.          var _loc6_:b2Body = null;
  117.          var _loc7_:b2Body = null;
  118.          var _loc8_:b2Body = null;
  119.          var _loc9_:Array = null;
  120.          var _loc10_:b2ContactPoint = null;
  121.          var _loc11_:int = 0;
  122.          var _loc12_:b2Manifold = null;
  123.          var _loc13_:int = 0;
  124.          var _loc14_:b2ManifoldPoint = null;
  125.          var _loc15_:b2Vec2 = null;
  126.          var _loc16_:b2Vec2 = null;
  127.          _loc2_ = param1.m_shape1;
  128.          _loc3_ = param1.m_shape2;
  129.          if((_loc4_ = param1.m_manifoldCount) > 0 && Boolean(m_world.m_contactListener))
  130.          {
  131.             _loc7_ = _loc2_.m_body;
  132.             _loc8_ = _loc3_.m_body;
  133.             _loc9_ = param1.GetManifolds();
  134.             (_loc10_ = s_evalCP).shape1 = param1.m_shape1;
  135.             _loc10_.shape2 = param1.m_shape1;
  136.             _loc10_.friction = param1.m_friction;
  137.             _loc10_.restitution = param1.m_restitution;
  138.             _loc11_ = 0;
  139.             while(_loc11_ < _loc4_)
  140.             {
  141.                _loc12_ = _loc9_[_loc11_];
  142.                _loc10_.normal.SetV(_loc12_.normal);
  143.                _loc13_ = 0;
  144.                while(_loc13_ < _loc12_.pointCount)
  145.                {
  146.                   _loc14_ = _loc12_.points[_loc13_];
  147.                   _loc10_.position = _loc7_.GetWorldPoint(_loc14_.localPoint1);
  148.                   _loc15_ = _loc7_.GetLinearVelocityFromLocalPoint(_loc14_.localPoint1);
  149.                   _loc16_ = _loc8_.GetLinearVelocityFromLocalPoint(_loc14_.localPoint2);
  150.                   _loc10_.velocity.Set(_loc16_.x - _loc15_.x,_loc16_.y - _loc15_.y);
  151.                   _loc10_.separation = _loc14_.separation;
  152.                   _loc10_.id.key = _loc14_.id._key;
  153.                   m_world.m_contactListener.Remove(_loc10_);
  154.                   _loc13_++;
  155.                }
  156.                _loc11_++;
  157.             }
  158.          }
  159.          if(param1.m_prev)
  160.          {
  161.             param1.m_prev.m_next = param1.m_next;
  162.          }
  163.          if(param1.m_next)
  164.          {
  165.             param1.m_next.m_prev = param1.m_prev;
  166.          }
  167.          if(param1 == m_world.m_contactList)
  168.          {
  169.             m_world.m_contactList = param1.m_next;
  170.          }
  171.          _loc5_ = _loc2_.m_body;
  172.          _loc6_ = _loc3_.m_body;
  173.          if(param1.m_node1.prev)
  174.          {
  175.             param1.m_node1.prev.next = param1.m_node1.next;
  176.          }
  177.          if(param1.m_node1.next)
  178.          {
  179.             param1.m_node1.next.prev = param1.m_node1.prev;
  180.          }
  181.          if(param1.m_node1 == _loc5_.m_contactList)
  182.          {
  183.             _loc5_.m_contactList = param1.m_node1.next;
  184.          }
  185.          if(param1.m_node2.prev)
  186.          {
  187.             param1.m_node2.prev.next = param1.m_node2.next;
  188.          }
  189.          if(param1.m_node2.next)
  190.          {
  191.             param1.m_node2.next.prev = param1.m_node2.prev;
  192.          }
  193.          if(param1.m_node2 == _loc6_.m_contactList)
  194.          {
  195.             _loc6_.m_contactList = param1.m_node2.next;
  196.          }
  197.          b2Contact.Destroy(param1,m_world.m_blockAllocator);
  198.          --m_world.m_contactCount;
  199.       }
  200.       
  201.       public function Collide() : void
  202.       {
  203.          var _loc1_:b2Contact = null;
  204.          var _loc2_:b2Body = null;
  205.          var _loc3_:b2Body = null;
  206.          _loc1_ = m_world.m_contactList;
  207.          while(_loc1_)
  208.          {
  209.             _loc2_ = _loc1_.m_shape1.m_body;
  210.             _loc3_ = _loc1_.m_shape2.m_body;
  211.             if(!(_loc2_.IsSleeping() && _loc3_.IsSleeping()))
  212.             {
  213.                _loc1_.Update(m_world.m_contactListener);
  214.             }
  215.             _loc1_ = _loc1_.m_next;
  216.          }
  217.       }
  218.    }
  219. }
  220.